-
Notifications
You must be signed in to change notification settings - Fork 6
When swapping directors, keep members active that are filling other roles #3501
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
When swapping directors, keep members active that are filling other roles #3501
Conversation
📝 Walkthrough""" WalkthroughThe codebase updates the logic for replacing project director memberships, introducing conditional handling for members with multiple roles. Now, when a director is swapped, only members with a single role are inactivated; members with multiple roles have only the relevant role removed. Tests are updated to cover this behavior. Changes
Assessment against linked issues
Assessment against linked issues: Out-of-scope changesNo out-of-scope changes found. ✨ Finishing Touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (5)
src/components/project/project-member/project-member.gel.repository.ts
(1 hunks)src/components/project/project-member/project-member.repository.ts
(2 hunks)src/core/database/query/cypher-functions.ts
(1 hunks)src/core/database/query/properties/update-property.ts
(1 hunks)test/features/director-change-replaces-memberships-on-open-projects.e2e-spec.ts
(5 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
src/core/database/query/properties/update-property.ts (1)
src/core/database/query-augmentation/subquery.ts (1)
varInExp
(69-72)
⏰ Context from checks skipped due to timeout of 90000ms (12)
- GitHub Check: Generate (head)
- GitHub Check: Generate (base)
- GitHub Check: Clean
- GitHub Check: E2E Tests (neo4j 5/6)
- GitHub Check: E2E Tests (neo4j 4/6)
- GitHub Check: E2E Tests (neo4j 6/6)
- GitHub Check: E2E Tests (neo4j 3/6)
- GitHub Check: E2E Tests (neo4j 1/6)
- GitHub Check: Unit
- GitHub Check: E2E Tests (neo4j 2/6)
- GitHub Check: lint
- GitHub Check: Analyze (javascript)
🔇 Additional comments (7)
src/core/database/query/cypher-functions.ts (1)
85-89
: LGTM! Well-documented APOC function wrapper.The
disjunction
function is properly implemented following the existing pattern for APOC wrappers, with clear documentation and a reference URL.src/core/database/query/properties/update-property.ts (1)
209-209
: Consistent variable extraction for conditional imports.Good change to wrap
conditionVar
withvarInExp
for consistent variable name extraction in the imports array.src/components/project/project-member/project-member.gel.repository.ts (1)
119-120
: Clean implementation of the conditional update logic.The split update strategy with union operation properly handles both cases - inactivating single-role members and removing specific roles from multi-role members.
test/features/director-change-replaces-memberships-on-open-projects.e2e-spec.ts (3)
70-78
: Good test coverage for the multi-role scenario.The new test case properly sets up a member with multiple roles to verify the conditional update behavior.
151-157
: Nice refactoring to make the test more maintainable.Using
entries
andmapEntries
makes the code more dynamic and easier to extend.
265-272
: Correct assertions for the multi-role behavior.The assertions properly verify that members with multiple roles remain active and only lose the replaced role.
src/components/project/project-member/project-member.repository.ts (1)
249-277
: Well-implemented conditional logic for role-based updates.The conditional branching correctly handles:
- Members with multiple roles: removes the specific role while keeping them active
- Members with a single role: marks them as inactive
The use of
disjunction
to remove a specific role from the array is appropriate.
src/components/project/project-member/project-member.gel.repository.ts
Outdated
Show resolved
Hide resolved
src/components/project/project-member/project-member.repository.ts
Outdated
Show resolved
Hide resolved
c3073ee
to
c110e5c
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Nitpick comments (2)
test/features/director-change-replaces-memberships-on-open-projects.e2e-spec.ts (2)
70-78
: Freeze the roles array to improve type-safetyMarking the literal array as immutable (
as const
) preserves the exact role string literals and prevents accidental mutation during the test.-roles: [Role.RegionalDirector, Role.ProjectManager], +roles: [Role.RegionalDirector, Role.ProjectManager] as const,
151-158
: Avoid theentries → mapEntries → asRecord
round-tripYou can derive the record in one pass, reducing allocations and improving clarity:
-const resultList = await Promise.all( - entries(projects).map(async ([key, project]) => { - const results = await fetchMembers(app, project.id); - return [key, results] as const; - }), -); -const results = mapEntries(resultList, (i) => i).asRecord; +const results = await mapEntries( + projects, + async (project) => fetchMembers(app, project.id), +).asRecord;
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (5)
src/components/project/project-member/project-member.gel.repository.ts
(1 hunks)src/components/project/project-member/project-member.repository.ts
(2 hunks)src/core/database/query/cypher-functions.ts
(1 hunks)src/core/database/query/properties/update-property.ts
(1 hunks)test/features/director-change-replaces-memberships-on-open-projects.e2e-spec.ts
(5 hunks)
🚧 Files skipped from review as they are similar to previous changes (4)
- src/core/database/query/properties/update-property.ts
- src/core/database/query/cypher-functions.ts
- src/components/project/project-member/project-member.gel.repository.ts
- src/components/project/project-member/project-member.repository.ts
⏰ Context from checks skipped due to timeout of 90000ms (12)
- GitHub Check: Generate (base)
- GitHub Check: Generate (head)
- GitHub Check: Clean
- GitHub Check: E2E Tests (neo4j 3/6)
- GitHub Check: E2E Tests (neo4j 4/6)
- GitHub Check: E2E Tests (neo4j 6/6)
- GitHub Check: Unit
- GitHub Check: E2E Tests (neo4j 5/6)
- GitHub Check: E2E Tests (neo4j 2/6)
- GitHub Check: E2E Tests (neo4j 1/6)
- GitHub Check: Analyze (javascript)
- GitHub Check: lint
Closes #3499